/*
 * 标题:          农务数据库检索系统
 * 
 * 描述:  		  以mysql为数据库，远程连接数据库进行水稻、 小麦、昆虫等数据库的检索
 * 
 * 备注:			 demo开头的html、jsp和java文件均为测试用例，无实际效用
 *
 * Copyright (c) 2017, Nanjing Agricultural University, China
 */

package cn.edu.njau.ads.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import cn.edu.njau.ads.model.Pest;
import cn.edu.njau.ads.util.AppException;
import cn.edu.njau.ads.util.DBUtil;

/**
 * 昆虫数据访问类
 * 
 * @author zzy
 *
 */
public class PestDB {
	
	/**
	 * 根据部分检索条件查询昆虫结果
	 * 
	 * @param name_cn		中文名
	 * @param name_latin	拉丁名
	 * @param _class		纲
	 * @param order			目
	 * @param family		科
	 * @return				昆虫对象数组
	 * @throws AppException
	 */
	public Pest[] getPests(String name_cn,String name_latin,String _class,String order,String family) throws AppException{
		Pest[] pests = null;
		// 声明数据库连接对象、预编译对象和结果集对象
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		try {
			// 创建数据库连接
			conn = DBUtil.getConnection("pest");
			// 声明操作语句,"?"为占位符
			
			// System.out.println(name_cn+name_latin+_class+order+family);
			
			String sql = "select * from t_rice_pest where zhongwenming Like ?"
					+ " and ldxm Like ?"
					+ " and gang Like ?"
					+ " and mu Like ?"
					+ " and ke like ?";
			// 预编译sql
			psmt = conn.prepareStatement(sql);
			// 为占位符设置值
			psmt.setString(1, "%"+name_cn+"%");
			psmt.setString(2, "%"+name_latin+"%");
			psmt.setString(3, "%"+_class+"%");
			psmt.setString(4, "%"+order+"%");
			psmt.setString(5, "%"+family+"%");
			// 执行此查询操作
			
			// System.out.println(sql);
			
			rs = psmt.executeQuery();
			
			// 移到最后一行
			rs.last(); 
			// 得到当前行号，也就是记录数
			int n = rs.getRow();
			// 移动回第一行前
			rs.beforeFirst();
			
			// System.out.println(rs.getRow());
			// System.out.println(n);
			
			if (n > 0) {
				pests = new Pest[n];
				for (int i = 0; i < n; i++) {
					// System.out.println(i);
			 		rs.next();
			 		// System.out.println(rs.getRow());
			 		// System.out.println(rs.getInt("id"));
			 		Pest pest = new Pest();
					pest.setId(rs.getInt("id"));
					pest.setName_cn(rs.getString("zhongwenming"));
					pest.setName_latin(rs.getString("ldxm"));
					pest.set_class(rs.getString("gang"));
					pest.setOrder(rs.getString("mu"));
					pest.setFamily(rs.getString("ke"));
					pests[i] = pest;
				}
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new AppException("cn.edu.njau.zzy.db.PestDB.getPests");
		} catch (Exception e) {
			e.printStackTrace();
			throw new AppException("cn.edu.njau.zzy.db.PestDB.getPests");
		} finally {
			// 关闭数据库查询结果集
			DBUtil.closeResultSet(rs);

			// 关闭数据库查询指令
			DBUtil.closeStatement(psmt);

			// 关闭数据库连接
			DBUtil.closeConnection(conn);
		}
		return pests;
	}
}
